#include<stdio.h>
#include<string.h>
#include<stdbool.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>

int jugar(char* frase,char deDonde);
int ingresarPalabraYJugar();
int leerPalabraDeArchivoYJugar();
void agregarPalabra(char* palabra);
void puntuacionAlta(int ganadas,char nombre,int tabla);

int main() {
    char menu;
    int ganadas = 0;
    int gano=0;
    int arch;
    while(menu!='3'){
        system("cls");
        printf("Seleccione del menu\n");
        printf("\t1.- Palabras escritas\n");
        printf("\t2.- Palabras al Azar\n");
        printf("\t3.- Salir\n");
        scanf("%s",&menu);
        switch(menu){
            case '1':
                ingresarPalabraYJugar();
                break;
            case '2':
                leerPalabraDeArchivoYJugar();
				break;
            case '3':
                break;
        }
    }
    printf("Chau!");
    return 0;
}

void puntuacionAlta(int ganadas,char nombre, int arch){
	FILE *archivo;
	char linea[100];
	if(arch == 1){
        archivo = fopen("data/puntosIngreados.dta", "r");
	}else{
        archivo = fopen("data/puntosAleatorios.dta", "r");
	}
	int nroLineas,ch;
    nroLineas = 1;
    while ((ch = fgetc(archivo)) != EOF){
        if (ch == '\n'){
            nroLineas++;
        }
    }
    fclose(archivo);
    if(arch == 1){
        archivo = fopen("data/puntosIngreados.dta", "r");
	}else{
        archivo = fopen("data/puntosAleatorios.dta", "r");
	}
    char puntuaciones[nroLineas][100];
	int i = 0;
	int j = 0;
    while ( fgets ( linea, sizeof linea, archivo ) != NULL ){
   		strncpy(puntuaciones[i],linea,100);
   		i++;
    }
    fclose(archivo);
    int lugar;
	for(i=0;i<nroLineas;i++){
        char *ptr;
        ptr = strtok(puntuaciones[i],",");
        ptr = strtok(NULL,",");
        int nro = (int)ptr;
        if(ganadas>=nro){
            lugar = i;
        }
	}
    if(arch == 1){
        archivo = fopen("data/puntosIngreados.dta", "w");
	}else{
        archivo = fopen("data/puntosAleatorios.dta", "w");
	}
	int guardo=0;
    for(i=0;i<nroLineas;i++){
        if(guardo==0){
            if(i==lugar){
                fputs(nombre,archivo);
                fputs(",",archivo);
                fputs(ganadas,archivo);
                fputs("\n",archivo);
                i--;
                guardo=1;
            }else{
                fputs(puntuaciones[i],archivo);
            }
        }else{
            fputs(puntuaciones[i],archivo);
        }
    }
    fclose(archivo);

}

void agregarPalabra(char* palabra){
    FILE *archivo;
    int existe = 0;

//    archivo = fopen("data/palabras.dta", "r");
//    char linea[ 128 ];
//    fclose (archivo);
//    while ( fgets ( linea, sizeof linea, archivo ) != NULL ){
//        if(linea == palabra){
//            existe=1;
//        }
//    }

    if(existe==0){
        archivo = fopen("data/palabras.dta", "a");
        fputs("\n",archivo);
        fputs(palabra,archivo);
        fclose (archivo);
    }
}

int leerPalabraDeArchivoYJugar(){

    FILE *archivo;
    char linea [ 128 ];
    long ltime;
    int stime;
    archivo = fopen("data/palabras.dta", "r");
    fseek(archivo, 0, SEEK_SET);

    ltime = time(NULL);
    stime = (unsigned) ltime/2;
    srand(stime);
    int random,cont=0,nroLineas,ch;
    nroLineas = 0;
    while ((ch = fgetc(archivo)) != EOF){
        if (ch == '\n'){
            nroLineas++;
        }
    }
    fclose(archivo);
    archivo = fopen("data/palabras.dta", "r");
    nroLineas++;
    random = rand()%nroLineas;
    while (feof(archivo) == 0){
        fgets(linea,100,archivo);
        if(cont==random){
            break;
        }
        cont++;
    }
    fclose(archivo);
    int gano = jugar(linea,"2");
    return gano;
}

int ingresarPalabraYJugar(){
    system("cls");
    char frase[60];
    printf("Introduzca la palabra(s) a adivinar: ");
    scanf("%s",frase);
    agregarPalabra(frase);
    int gano = jugar(frase,"1");
    return gano;
}

int jugar(char* frase,char deDonde){
    //LOGICA JUEGO
    //Inicializo las variables del juego
    char fraseAux[60],rep[100],temporal[100];
    char pal;
    int longitud,i,j,inicial,acertado=0,temp,chance=7;
    bool repetido=false,gano=false,perdio=false;

	char *horca[] = {
	"_ _ _  ",
	"|   |  ",
	"|   |  ",
	"|      ",
	"|      ",
	"|      ",
	"|      ",
	"|______"
	};

    i = 0;
    j = 0;
    while (frase[i] != '\0'){
        if ('\n' != frase[i]){
          fraseAux[j] = frase[i];
          j++;
        }
        i++;
    }
    fraseAux[j] = '\0';
    frase = fraseAux;

    char primera = frase[0];
    char ultima;
    if(deDonde=="1"){
        ultima = frase[(strlen(frase)-2)];
    }else{
        ultima = frase[(strlen(frase)-1)];
    }
    longitud = 0;
    inicial = 0;
    j = 0;
    rep[0] = ' ';
    rep[1] = '\0';
    do {
        system("cls");
        temp=0;
        i=0;
        if(inicial == 0) {
            for(i=0;i<strlen(frase);i++) {
                if(frase[i]==primera){
                    temporal[i] = primera;
                    longitud++;
                }else if(frase[i]==ultima){
                    temporal[i] = ultima;
                    longitud++;
                }else{
                    temporal[i] = '_';
                    longitud++;
                }
            }
            inicial = 1;
        }




        temporal[longitud] = '\0';
        for(i=0;i<strlen(rep);i++) {
            if(rep[i] == pal) {
                repetido = true;
                break;
            }else {
                repetido = false;
            }
        }

        if(repetido == false) {
            for(i=0;i<strlen(frase);i++) {
                if(frase[i] == pal) {
                    temporal[i] = pal;
                    acertado++;
                    temp=1;
                }
            }
        }

        if(repetido == false) {
            if(temp == 0) {
                chance = chance - 1;
				if(chance<6){
					horca[3]="|   O  ";
				}
				if(chance<5){
					horca[4]="|   |  ";
				}
				if(chance<4){
					horca[4]="|  /|  ";
				}
				if(chance<3){
					horca[4]="|  /|\\ ";
				}
				if(chance<2){
					horca[5]="|  /   ";
				}
				if(chance<1){
					horca[5]="|  / \\ ";
				}
				if(chance==0){
					perdio = true;
				}
            }
        }else {
            printf("Caracter Repetido o Ya Consultado");
            printf("\n\n");
        }

        printf("\n");

        for(i=0;i<strlen(temporal);i++) {
            printf(" %c ",temporal[i]);
        }

        printf("\n");

        if(strcmp(frase,temporal) == 0) {
            gano = true;
            break;
        }

        printf("\n");
        printf("Letras Acertadas: %d",acertado);
        printf("\n");
        printf("Oportunidades Restantes: %d",chance);
        printf("\n");

        rep[j] = pal;
        j++;

        for(i=0;i<8;i++){
			printf("%s\n",horca[i]);
        }
		if(!perdio && !gano){
	        printf("Introduzca un caracter para adivinar la cadena:");
	        scanf("\n%c",&pal);
		}
    }while(!gano && !perdio);
        system("cls");
        if(gano) {
            printf("Felicitaciones, adivinastes la palabra");
        }else if(perdio){
            printf("Perdistes, mejor suerte para la proxima!\n");
            printf("La palabra era: %s",frase);
        }
        Sleep(2000);
        printf("\n\n");
        if(gano){
			return 1;
        }else{
			return 0;
        }
}

